package com.zhijian.medical.enums.diagnose.report;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 胰胆壶腹癌报告枚举
 */
@Slf4j
public class PancreaticEnum {

    /**
     * 术前辅助治疗
     */
    @AllArgsConstructor
    @Getter
    public enum PreoperativeAdjuvantTherapyEnum {

        NO("yes", "有"),
        NEW("no", "无"),
        UNKNOWN("unknown", "无法确定");

        private final String key;
        private final String desc;


        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(PreoperativeAdjuvantTherapyEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 标本名称
     */
    @AllArgsConstructor
    @Getter
    public enum SampleNameEnum {

        // 胃组织 吻合口近端 吻合口远端 胰十二指肠切除标本 胰体尾及脾脏除标本 其他
        GASTROINTESTINAL("gastrointestinal", "胃组织"),
        NEAR("near", "吻合口近端"),
        FAR("far", "吻合口远端"),
        PANCREATIC("pancreatic", "胰十二指肠切除标本"),
        PANCREATIC_BILIARY("pancreatic_biliary", "胰体尾及脾脏切除标本"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(SampleNameEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 肿瘤类型
     */
    @AllArgsConstructor
    @Getter
    public enum TumorTypeEnum {

        // Vater壶腹癌 远端胆管癌 胰腺癌 小肠癌
        VATER("vater", "Vater壶腹癌"),
        DISTAL("distal", "远端胆管癌"),
        PANCREATIC("pancreatic", "胰腺癌"),
        SMALL_INTESTINE("small_intestine", "小肠癌");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(TumorTypeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 标本部位
     */
    @AllArgsConstructor
    @Getter
    public enum SamplePositionEnum {

        // 胰头部 胰体部 胰尾部 壶腹部，远端胆管 十二指肠 空肠 回肠 其他
        PANCREAS_HEAD("pancreas_head", "胰头部"),
        PANCREAS_BODY("pancreas_body", "胰体部"),
        PANCREAS_TAIL("pancreas_tail", "胰尾部"),
        AMPULLA("ampulla", "壶腹部，远端胆管"),
        DUODENUM("duodenum", "十二指肠"),
        JEJUNUM("jejum", "空肠"),
        ILEUM("ileum", "回肠"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(SamplePositionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 肿瘤大小
     */
    @AllArgsConstructor
    @Getter
    public enum TumorSizeEnum {

        S3("3.5x2.0", "3.5x2.0"),
        S20("20x16x3", "20x16x3");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(TumorSizeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学类型
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalTypeEnum {
        /**
         * 腺癌，NOS 黏液腺癌 印戒细胞癌 髓样癌，NOS 腺癌，肠型 胰胆管型癌 管状腺癌 腺瘤样息肉，低级别异型增生
         * 腺瘤样息肉，高级别异型增生 肠型腺瘤，低级别 肠型腺瘤，高级别 锯齿状异型增生，低级别 锯齿状异型增生，高级别
         * 非浸润性胰胆管型乳头状肿瘤伴低级别异型增生 非浸润性胰胆管型乳头状肿瘤伴高级别异型瑁生
         * 神经内分泌癌，NOS 大细胞神经内分泌癌 小细胞神经内分泌癌 混合性神经内分泌-非神经内分泌肿瘤（MiNEN）
         */
        ADENOCARCINOMA("adenocarcinoma", "腺癌，NOS"),
        MUCOUS_GLAND("mucous_gland", "黏液腺癌"),
        SIGNET_RING_CELL_ADENOCARCINOMA("signet_ring_cell_adenocarcinoma", "印戒细胞癌"),
        MYELOID("myeloid", "髓样癌，NOS"),
        ADENOCARCINOMA_INTESTINAL_TYPE("adenocarcinoma_intestinal_type", "腺癌，肠型"),
        PANCREATIC_AND_BILIARY_DUCT_TYPE("pancreatic_and_biliary_duct_type", "胰胆管型癌"),
        TUBULAR_GLAND("tubular_gland", "管状腺癌"),
        ADENOMATOUS_POLYPOID_LOW_GRADE_DYSPLASIA("adenomatous_polypoid_low_grade_dysplasia", "腺瘤样息肉，低级别异型增生"),
        ADENOMATOUS_POLYPOID_HIGH_GRADE_DYSPLASIA("adenomatous_polypoid_high_grade_dysplasia", "腺瘤样息肉，高级别异型增生"),
        INTESTINAL_ADENOMA_LOW_GRADE("intestinal_adenoma_low_grade", "肠型腺瘤，低级别"),
        INTESTINAL_ADENOMA_HIGH_GRADE("intestinal_adenoma_high_grade", "肠型腺瘤，高级别"),
        SERRATED_DYSPLASIA("serrated_dysplasia", "锯齿状异型增生"),
        SERRATED_DYSPLASIA_LOW_GRADE("serrated_dysplasia_low_grade", "锯齿状异型增生，低级别"),
        SERRATED_DYSPLASIA_HIGH_GRADE("serrated_dysplasia_high_grade", "锯齿状异型增生，高级别"),
        NON_INVASIVE_PANCREATICOBILIARY_TYPE_LOW("non_invasive_pancreaticobiliary_type_low", "非浸润性胰胆管型乳头状肿瘤伴低级别异型增生"),
        NON_INVASIVE_PANCREATICOBILIARY_TYPE_HIGH("non_invasive_pancreaticobiliary_type_high", "非浸润性胰胆管型乳头状肿瘤伴高级别异型瑁生"),
        NEUROENDOCRINE("neuroendocrine", "神经内分泌癌，NOS"),
        LARGE_CELL_NEUROENDOCRINE("large_cell_neuroendocrine", "大细胞神经内分泌癌"),
        SMALL_CELL_NEUROENDOCRINE("small_cell_neuroendocrine", "小细胞神经内分泌癌"),
        MIXED_NEUROENDOCRINE_NON_NEUROENDOCRINE("mixed_neuroendocrine_non_neuroendocrine", "混合性神经内分泌-非神经内分泌肿瘤（MiNEN)");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalTypeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 百分比
     */
    @AllArgsConstructor
    @Getter
    public enum PercentageEnum {

        P0(0, "0"),
        P10(10, "10"),
        P20(20, "20"),
        P30(30, "30"),
        P40(40, "40"),
        P50(50, "50"),
        P60(60, "60"),
        P70(70, "70"),
        P80(80, "80"),
        P90(90, "90"),
        P100(100, "100");

        private final Integer key;
        private final String desc;

        private static final List<MappingEnum<Integer, String>> TEMP_MAPPING = Arrays.stream(PercentageEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<Integer, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 组织学分级
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalGradeEnum {
        //高分化 高-中分化 中分化 中-低分化 低分化 不适用
        HIGH("high", "高分化"),
        HIGH_MIDDLE("high_middle", "高-中分化"),
        MIDDLE("middle", "中分化"),
        MIDDLE_LOW("middle_low", "中-低分化"),
        LOW("low", "低分化"),
        NOT_APPLICABLE("not_applicable", "不适用");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalGradeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学亚型
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalSubtypeEnum {
        //胰胆管型 肠型 混合型
        PANCREATIC_AND_BILIARY_DUCT_TYPE("pancreatic_and_biliary_duct_type", "胰胆管型"),
        INTESTINAL_TYPE("intestinal_type", "肠型"),
        MIXED_TYPE("mixed_type", "混合型");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalSubtypeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 壶腹部侵犯
     */
    @AllArgsConstructor
    @Getter
    public enum AmpullaInvolvedEnum {
        //未见侵犯 肿瘤局限于壶腹部或oddi括约肌  肿瘤超出Oddi括约肌 局限于壸腹部黏膜 不适用
        NOT_INVOLVED("not_involved", "未见侵犯"),
        LIMITED_TO_THE_AMPULLA("limited_to_the_ampulla", "肿瘤局限于壶腹部或oddi括约肌"),
        EXCEEDS_ODD("exceeds_odd", "肿瘤超出Oddi括约肌"),
        LIMITED_TO_THE_MUCOSA("limited_to_the_mucosa", "局限于壸腹部黏膜"),
        NOT_APPLICABLE("not_applicable", "不适用");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(AmpullaInvolvedEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 远端胆管侵犯
     */
    @AllArgsConstructor
    @Getter
    public enum DistalBileDuctInvolvedEnum {
        //未见侵犯 可见原位癌/高级别异型增生 肿瘤侵犯胆管壁深度<=5mm 肿瘤侵犯胆管壁深度5-12mm 肿瘤侵犯胆管壁深度>12mm
        //肿瘤侵犯腹腔动脉干 肿瘤侵犯肠系膜上动脉  肿瘤侵犯肝总动脉 癌组织侵及远端胆管 不适用
        NOT_YET_SEEN("not_yet_seen", "未见侵犯"),
        VISIBLE("visible", "可见原位癌/高级别异型增生"),
        DEPTH_OF_TUMOR_INVASION_LESS_THAN_OR_EQUAL_TO_5MM("depth_of_tumor_invasion_less_than_or_equal_to_5mm", "肿瘤侵犯胆管壁深度<=5mm"),
        DEPTH_OF_TUMOR_INVASION_5_TO_12MM("depth_of_tumor_invasion_5_to_12mm", "肿瘤侵犯胆管壁深度5-12mm"),
        DEPTH_OF_TUMOR_INVASION_MORE_THAN_12MM("depth_of_tumor_invasion_more_than_12mm", "肿瘤侵犯胆管壁深度>12mm"),
        INVOLVES_THE_AORTIC_ARTERY("involves_the_aortic_artery", "肿瘤侵犯腹腔动脉干"),
        INVOLVES_THE_SUPERIOR_MESENTERIC_ARTERY("involves_the_superior_mesenteric_artery", "肿瘤侵犯肠系膜上动脉"),
        INVOLVES_THE_COMMON_HEPATIC_ARTERY("involves_the_common_hepatic_artery", "肿瘤侵犯肝总动脉"),
        TUMOR_INVOLVES_THE_DISTAL_BILE_DUCT("tumor_involves_the_distal_bile_duct", "癌组织侵及远端胆管"),
        NOT_APPLICABLE("not_applicable", "不适用");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(DistalBileDuctInvolvedEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 小肠侵犯
     */
    @AllArgsConstructor
    @Getter
    public enum IntestinalInvolvedEnum {
        //未见侵犯 肿瘤侵及十二指肠黏膜下层 肿瘤侵及十二指肠固有肌层 肿瘤侵及十二指肠浆膜 不适用
        NOT_YET_SEEN("not_yet_seen", "未见侵犯"),
        INVOLVES_THE_SUBMUCOSAL_LAYER_OF_THE_DUODENUM("involves_the_submucosal_layer_of_the_duodenum", "肿瘤侵及十二指肠黏膜下层"),
        INVOLVES_THE_INTRAMUSCULAR_LAYER_OF_THE_DUODENUM("involves_the_intramural_layer_of_the_duodenum", "肿瘤侵及十二指肠固有肌层"),
        INVOLVES_THE_SEROSA_OF_THE_DUODENUM("involves_the_serosa_of_the_duodenum", "肿瘤侵及十二指肠浆膜"),
        NOT_APPLICABLE("not_applicable", "不适用");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(IntestinalInvolvedEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 胰腺侵犯
     */
    @AllArgsConstructor
    @Getter
    public enum PancreaticInvolvedEnum {
        //未见侵犯 肿瘤侵及胰腺≤0.5cm 肿瘤侵及胰腺>0.5cm 肿瘤侵及胰腺周围结缔组织 癌组织侵犯胰腺 不适用
        NOT_YET_SEEN("not_yet_seen", "未见侵犯"),
        INVOLVES_THE_PANCREAS_LESS_THAN_OR_EQUAL_TO_05CM("involves_the_pancreas_less_than_or_equal_to_05cm", "肿瘤侵及胰腺≤0.5cm"),
        INVOLVES_THE_PANCREAS_MORE_THAN_05CM("involves_the_pancreas_more_than_05cm", "肿瘤侵及胰腺>0.5cm"),
        INVOLVES_THE_PANCREATIC_SURROUNDING_CONJUNCTIVE_TISSUE("involves_the_pancreatic_surrounding_conjunctive_tissue", "肿瘤侵及胰腺周围结缔组织"),
        TUMOR_INVOLVES_THE_PANCREAS("tumor_involves_the_pancreas", "癌组织侵犯胰腺"),
        NOT_APPLICABLE("not_applicable", "不适用");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(PancreaticInvolvedEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 大血管侵犯
     */
    @AllArgsConstructor
    @Getter
    public enum VascularInvolvedEnum {
        //腹腔动脉 肠系膜上动脉 肝总动脉 有，请说明侵犯部位及深度 无  无法评佶 不适用
        AORTIC_ARTERY("aortic_artery", "腹腔动脉"),
        SUPERIOR_MESENTERIC_ARTERY("superior_mesenteric_artery", "肠系膜上动脉"),
        COMMON_HEPATIC_ARTERY("common_hepatic_artery", "肝总动脉"),
        HAS("has", "有，请说明侵犯部位及深度"),
        NO("no", "无"),
        UNCERTAIN("uncertain", "无法评佶"),
        NOT_APPLICABLE("not_applicable", "不适用");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(VascularInvolvedEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 微血管侵犯
     */
    @AllArgsConstructor
    @Getter
    public enum MicrovascularInvolvedEnum {
        //可见  未见 不确定 不适用
        VISIBLE("visible", "可见"),
        NOT_YET_SEEN("not_yet_seen", "未见"),
        UNCERTAIN("uncertain", "不确定"),
        NOT_APPLICABLE("not_applicable", "不适用");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(MicrovascularInvolvedEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 神经侵犯
     */

    //可见 未见 不确定 不适用
    @AllArgsConstructor
    @Getter
    public enum NerveInvolvedEnum {
        VISIBLE("visible", "可见"),
        NOT_YET_SEEN("not_yet_seen", "未见"),
        UNCERTAIN("uncertain", "不确定"),
        NOT_APPLICABLE("not_applicable", "不适用");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(NerveInvolvedEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 切缘名称
     */
    @AllArgsConstructor
    @Getter
    public enum CutEdgeNameEnum {
        //胰腺断端切缘 胰腺环周切缘 胆管切缘 胆总管切缘 胰腺前表面 胰腺后表面 十二指肠下切缘 胃切缘 肠切缘 胃肠两切缘 十二指肠两端切缘  大血管切缘
        PANCREATIC_CUT_EDGE("pancreatic_cut_edge", "胰腺断端切缘"),
        PANCREATIC_CIRCUMFERENTIAL_CUT_EDGE("pancreatic_circumferential_cut_edge", "胰腺环周切缘"),
        BILE_DUCT_CUT_EDGE("bile_duct_cut_edge", "胆管切缘"),
        COMMON_BILE_DUCT_CUT_EDGE("common_bile_duct_cut_edge", "胆总管切缘"),
        PANCREATIC_FRONT_SURFACE("pancreatic_front_surface", "胰腺前表面"),
        PANCREATIC_BACK_SURFACE("pancreatic_back_surface", "胰腺后表面"),
        JEJUNUM_LOWER_CUT_EDGE("jejum_lower_cut_edge", "十二指肠下切缘"),
        STOMACH_CUT_EDGE("stomach_cut_edge", "胃切缘"),
        INTESTINE_CUT_EDGE("intestine_cut_edge", "肠切缘"),
        STOMACH_INTESTINE_TWO_CUT_EDGE("stomach_intestine_two_cut_edge", "胃肠两切缘"),
        JEJUNUM_TWO_END_CUT_EDGE("jejum_two_end_cut_edge", "十二指肠两端切缘"),
        BIG_VESSEL_CUT_EDGE("big_artery_cut_edge", "大血管切缘");
        

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(CutEdgeNameEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 切缘情况
     */
    @AllArgsConstructor
    @Getter
    public enum CutEdgeSituationEnum {
        //未见癌残留 癌组织紧靠标本切缘 见癌组织累及
        NOT_YET_SEEN("not_yet_seen", "未见癌残留"),
        CLOSER_TO_THE_SAMPLE_CUT_EDGE("closer_to_the_sample_cut_edge", "癌组织紧靠标本切缘"),
        SEE_CANCER_TISSUE("see_cancer_tissue", "见癌组织累及");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(CutEdgeSituationEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 胃
     */
    @AllArgsConstructor
    @Getter
    public enum StomachEnum {
        //轻度慢性非萎缩性胃炎 轻度慢性萎缩性胃炎伴肠上皮化生 其他
        MILD_CHRONIC_NON_ATROPHIC_GASTRITIS("mild_chronic_non_atrophic_gastritis", "轻度慢性非萎缩性胃炎"),
        MILD_CHRONIC_ATROPHIC_GASTRITIS_WITH_INTestinal_METAPLASIA("mild_chronic_atrophic_gastritis_with_intestinal_metaplasia", "轻度慢性萎缩性胃炎伴肠上皮化生"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(StomachEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 肠
     */
    @AllArgsConstructor
    @Getter
    public enum IntestineEnum {
        //未见特殊 管状腺瘤 其他
        NOT_YET_SEEN("not_yet_seen", "未见特殊"),
        TUBULAR_ADENOMA("tubular_adenoma", "管状腺瘤"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(IntestineEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 胆囊
     */
    @AllArgsConstructor
    @Getter
    public enum GallbladderEnum {
        //慢性胆囊炎 慢性胆囊炎；胆囊结石 其他
        CHRONIC_GALLBLADDER_INFLAMMATION("chronic_gallbladder_inflammation", "慢性胆囊炎"),
        CHRONIC_GALLBLADDER_INFLAMMATION_AND_GALLSTONES("chronic_gallbladder_inflammation_and_gallstones", "慢性胆囊炎；胆囊结石"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(GallbladderEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 胰腺
     */
    @AllArgsConstructor
    @Getter
    public enum PancreasEnum {
        //未见特殊 轻度慢性胰腺炎 其他
        NOT_YET_SEEN("not_yet_seen", "未见特殊"),
        MILD_CHRONIC_PANCREATITIS("mild_chronic_pancreatitis", "轻度慢性胰腺炎"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(PancreasEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 脾脏
     */
    @AllArgsConstructor
    @Getter
    public enum SpleenEnum {
        //未见特殊 其他
        NOT_YET_SEEN("not_yet_seen", "未见特殊"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(SpleenEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 周伟情况-表单1
     */
    @AllArgsConstructor
    @Getter
    public enum Form1Enum {
        //粗糙+上切 3点 6点 9点 下切 癌结节 网膜 近端 远端
        ROUGH_PLUS_UP("rough_plus_up", "粗糙+上切"),
        THREE_POINTS("three_points", "3点"),
        SIX_POINTS("six_points", "6点"),
        NINE_POINTS("nine_points", "9点"),
        DOWN("down", "下切"),
        CANCER_NODULE("cancer_nodule", "癌结节"),
        NET("net", "网膜"),
        NEAR("near", "近端"),
        FAR("far", "远端");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(Form1Enum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 周伟情况-表单2
     */
    @AllArgsConstructor
    @Getter
    public enum Form2Enum {
        //未见癌累及  见癌累及
        NOT_YET_SEEN("not_yet_seen", "未见癌累及"),
        SEE_CANCER("see_cancer", "见癌累及");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(Form2Enum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 远处转移
     */
    @AllArgsConstructor
    @Getter
    public enum MetastasisEnum {
        //Mx远处转移无法评估 cM0无远处转移 M1有远处转移
        MX("mx", "Mx远处转移无法评估"),
        C_M0("c_m0", "cM0无远处转移"),
        M_1("m_1", "M1有远处转移");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(MetastasisEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 分子检测-检测方法
     */
    @AllArgsConstructor
    @Getter
    public enum DetectionMethodEnum {
        //FISH PCR  NGS
        FISH("fish", "FISH"),
        PCR("pcr", "PCR"),
        NGS("ngs", "NGS");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(DetectionMethodEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 分子检测-检测结果
     */
    @AllArgsConstructor
    @Getter
    public enum DetectionResultEnum {
        //突变 未突变 未知
        MUTATION("mutation", "突变"),
        NOT_MUTATION("not_mutation", "未突变"),
        UNKNOWN("unknown", "未知");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(DetectionResultEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 淋巴结
     */
    @AllArgsConstructor
    @Getter
    public enum LymphGlandEnum {

        NOT_TRANSFERRED("not_transferred", "未见转移"),
        SEE_TRANSFER("see_transfer", "见转移"),
        ADIPOSE_TISSUE("adipose_tissue", "脂肪组织"),
        GRANULOMATOUS_INFLAMMATION("granulomatous_inflammation", "肉芽肿性炎"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(LymphGlandEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 免疫组化-表达式
     */
    @AllArgsConstructor
    @Getter
    public enum ImmunohistochemistryExpressionEnum {

        PLUS("+", "+"),
        REDUCE("-", "-"),
        PLUS2("++", "++"),
        PLUS3("+++", "+++"),
        PLUS_OR_MINUS("±", "±");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(ImmunohistochemistryExpressionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 免疫组化-其他表达
     */
    @AllArgsConstructor
    @Getter
    public enum ImmunohistochemistryOtherExpressionEnum {

        LYMPHOCYTE_EXPRESSION("lymphocyte_expression", "淋巴细胞表达"),
        VASCULAR_EXPRESSION("vascular_expression", "脉管表达"),
        IMMUNE_CELL_EXPRESSION("immune_cell_expression", "间质免疫细胞表达");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(ImmunohistochemistryOtherExpressionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 原位杂交/特殊染色-分析结果
     */
    @AllArgsConstructor
    @Getter
    public enum InSituHybridizationExpressionEnum {

        PLUS("+", "+"),
        REDUCE("-", "-"),
        ZERO("0", "0"),
        PLUS1("1+", "1+"),
        PLUS2("2+", "2+"),
        PLUS3("3+", "3+"),
        PLUS_OR_MINUS("±", "±");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(InSituHybridizationExpressionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 其他送检组织
     */
    @AllArgsConstructor
    @Getter
    public enum OtherInspectionOrganizationsEnum {

        GASTRIC_TISSUE("gastric_tissue", "胃组织"),
        ANASTOMOTIC_SITE_NEAR_END("anastomotic_site_near_end", "吻合口近端"),
        ANASTOMOTIC_SITE_REMOTE_END("anastomotic_site_remote_end", "吻合口远端");

        private final String key;
        private final String desc;


        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(OtherInspectionOrganizationsEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


}
